package com.summer.bilibili.config;

import com.summer.bilibili.config.upload.UploadConfig;
import com.summer.bilibili.config.video.VideoConfig;
import com.summer.bilibili.consts.FileMediaType;
import com.summer.bilibili.consts.TokenType;
import lombok.Data;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;


import java.io.Serializable;
import java.util.Map;

/**
 * 自定义配置文件,聚合所有子配置
 * 使用Map结构支持动态配置（如TokenType到TokenConfig的映射），便于处理多类型令牌或文件上传策略
 */
@ConfigurationProperties(value = "app") // 绑定外部属性到Java对象。
@EnableConfigurationProperties(value = { ResourceConfig.class , VideoConfig.class , OssConfig.class })
//在AppConfig中启用其他配置类

@Data
public class AppConfig implements Serializable {
    /**
     * 令牌配置
     */
    private Map < TokenType, TokenConfig > token;
    /**
     * 文件类型 : 上传配置
     */
    private Map < FileMediaType, UploadConfig > upload;
    /**
     * 自定义属性
     */
    private Map < String, Object > custom;
    /**
     * 资源配置文件
     */
    private ResourceConfig resource;
    /**
     * 视频配置
     */
    private VideoConfig video;
    /**
     * 阿里云oss
     */
    private OssConfig oss;
    /**
     * oauth2.0
     */
    private Map < String, Map < String, String > > oauth;
}
